﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace SisEagle.Common.Code.Utils
{
    public  class UtilsNum
    {
        #region Variaveis
        private readonly Regex Numero = new System.Text.RegularExpressions.Regex("[^0-9]");

        #endregion

        #region Valida Numeros
        /// <summary>
        /// Verifica se o conteudo tem apenas numeros
        /// </summary>
        /// <param name="texto"></param>
        /// <returns> true ou false</returns>
        public bool IsNumber(string texto)
        {
            if(string.IsNullOrEmpty(texto))
            {
                return false;
            }
            else
                return !(Numero.IsMatch(texto));
        }

        #endregion

        #region CPF
        /// <summary>
        /// Valida o Cep
        /// </summary>
        /// <param name="texto"></param>
        /// <returns></returns>
        public  bool ValidaCPF(string texto)
        {
            #region Variaveis
            int[] multiplicador1 = new int[9] { 10,9,8,7,6,5,4,3,2 };

            int[] multiplicador2 = new int[10] { 11,10,9,8,7,6,5,4,3,2 };

            string tempCpf;

            string digito;

            int soma;

            int resto;
            #endregion

            texto = texto.Trim();

            texto = texto.Replace(".","").Replace("-","");

            if(texto.Length != 11)

                return false;

            tempCpf = texto.Substring(0,9);

            soma = 0;

            for(int i = 0;i < 9;i++)

                soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i];

            resto = soma % 11;

            if(resto < 2)

                resto = 0;

            else

                resto = 11 - resto;

            digito = resto.ToString();

            tempCpf = tempCpf + digito;

            soma = 0;

            for(int i = 0;i < 10;i++)

                soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];

            resto = soma % 11;

            if(resto < 2)
            {

                resto = 0;
            }
            else
                resto = 11 - resto;

            digito = digito + resto.ToString();

            return texto.EndsWith(digito);

        }
        #endregion

        #region CNPJ
        public  bool ValidaCNPJ(string vrCNPJ)
        {

            string CNPJ = vrCNPJ.Replace(".","");

            CNPJ = CNPJ.Replace("/","");

            CNPJ = CNPJ.Replace("-","");



            int[] digitos,soma,resultado;

            int nrDig;

            string ftmt;

            bool[] CNPJOk;



            ftmt = "6543298765432";

            digitos = new int[14];

            soma = new int[2];

            soma[0] = 0;

            soma[1] = 0;

            resultado = new int[2];

            resultado[0] = 0;

            resultado[1] = 0;

            CNPJOk = new bool[2];

            CNPJOk[0] = false;

            CNPJOk[1] = false;



            try
            {

                for(nrDig = 0;nrDig < 14;nrDig++)
                {

                    digitos[nrDig] = int.Parse(

                        CNPJ.Substring(nrDig,1));

                    if(nrDig <= 11)

                        soma[0] += (digitos[nrDig] *

                          int.Parse(ftmt.Substring(

                          nrDig + 1,1)));

                    if(nrDig <= 12)

                        soma[1] += (digitos[nrDig] *

                          int.Parse(ftmt.Substring(

                          nrDig,1)));

                }



                for(nrDig = 0;nrDig < 2;nrDig++)
                {

                    resultado[nrDig] = (soma[nrDig] % 11);

                    if((resultado[nrDig] == 0) || (

                         resultado[nrDig] == 1))

                        CNPJOk[nrDig] = (

                        digitos[12 + nrDig] == 0);

                    else

                        CNPJOk[nrDig] = (

                        digitos[12 + nrDig] == (

                        11 - resultado[nrDig]));

                }

                return (CNPJOk[0] && CNPJOk[1]);

            }

            catch
            {

                return false;

            }

        }


        #endregion

        #region Retira Espaços
        public  string FormataTexto(string texto)
        {
            var palavra = texto.Replace(",","").Replace("-","").Replace(".","").Replace("(","").Replace(")","").Replace("/","");

            return palavra;
        }

        #endregion

        #region Formata Decimal

        public  string FormataDecimal(decimal numero)
        {
            return numero.ToString().Replace(",",".");
        }

        #endregion



    }
}




